package es.ucm.fdi.pe.practica3.genetico3.mutacion;

import es.ucm.fdi.pe.practica3.genetico3.Arbol.Tipo;
import es.ucm.fdi.pe.practica3.genetico3.Individuo;



public class Mutacion {
	
	public final static int Funcional = 0;
	public final static int Terminal = 1;
	public final static int InicializacionCompleta = 2;
	public final static int InicializacionCreciente = 3;
	public final static String[] Metodos = {"Funcional","Terminal","Inicializacion Completa","Inicializacion Creciente"};
	
	public void mutar(int metodo, Individuo c){
		switch (metodo){
			case Funcional:  new MutacionFuncional().mutar(c); break;
			case Terminal:  new MutacionTerminal().mutar(c); break;
			case InicializacionCompleta: new MutacionInicializacionCompleta(2).mutar(c); break;
			case InicializacionCreciente:  new MutacionInicializacionCreciente(2).mutar(c); break;
			default: new MutacionFuncional().mutar(c); break;
		}
	}
	
	protected static Tipo operandoAleatorio() {
		double a = Math.random();
		if (a<0.333333333)
			return Tipo.AVANZA;
		else if (a<0.666666666)
			return Tipo.GIRA_DERECHA;
		else
			return Tipo.GIRA_IZQUIERDA;
	}
	
	protected int alea_entero(int min, int max) {
		double a = Math.random();
		return min+(int)(a*(1+max-min));
	}		
	
	protected static Tipo operadorAleatorio() {
		double a = Math.random();
		if (a<0.5)
			return Tipo.SIC;
		else 
			return Tipo.PROGN2;
	
	}

}
